"""
全国疫情地图构建


【完美解决】Python 中 pyecharts 的Map地图数据不显示问题
https://blog.csdn.net/m0_70227179/article/details/132263891
"""
import json

from pyecharts.charts import Map
from pyecharts.options import *


def province(pro):
    """
    解决：新版pyecharts的map中国地图，省份参数需要加上"省“，例如：“安徽”，就必须要是安徽省，这样数据才能在地图中显示
    :param pro:
    :return:
    """
    provinces = ["北京市", "天津市", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省", "浙江省", "安徽省", "福建省", "江西省",
                 "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省",
                 "青海省", "宁夏回族自治区", "新疆维吾尔自治区", "台湾省", "香港特别行政区", "澳门特别行政区"]

    # for p in provinces:
    #     if p.find(pro) >= 0:
    #         return p
    #         break

    for p in provinces:
        if pro in p:
            return p
            break


f = open("./疫情.txt", "r", encoding="utf-8")
data = f.read()
f.close()

data_dict = json.loads(data)

province_data_list = data_dict['areaTree'][0]['children']

data_list = []
for province_data in province_data_list:
    province_name = province(province_data["name"])  # 省份名称
    province_confirm = province_data["total"]["confirm"]  # 确诊人数
    data_list.append((province_name, province_confirm))

print(data_list)

# 创建地图实例
test_map = Map()

test_map.add("各省份确诊人数", data_list, "china")

test_map.set_global_opts(
    title_opts=TitleOpts(title="全国疫情地图"),
    visualmap_opts=VisualMapOpts(
        is_show=True,  # 是否显示
        is_piecewise=True,  # 是否分段
        pieces=[
            {"min": 1, "max": 99, "lable": "1~99人", "color": "#CCFFFF"},
            {"min": 100, "max": 999, "lable": "1~999人", "color": "#FFFF99"},
            {"min": 1000, "max": 4999, "lable": "1~4999人", "color": "#FF9966"},
            {"min": 5000, "max": 9999, "lable": "5000~9999人", "color": "#FF6666"},
            {"min": 10000, "max": 99999, "lable": "10000~99999人", "color": "#CC3333"},
            {"min": 100000, "lable": "100000+", "color": "#990033"},
        ]
    )
)

test_map.render("全国疫情地图.html")
